home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / python2.4 / distutils / command / install.pyc (.txt) < prev    next >
Python Compiled Bytecode  |  2005-10-18  |  14KB  |  405 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.4)
  3.  
  4. """distutils.command.install
  5.  
  6. Implements the Distutils 'install' command."""
  7. from distutils import log
  8. __revision__ = '$Id: install.py,v 1.72.2.1 2005/01/20 19:15:39 theller Exp $'
  9. import sys
  10. import os
  11. import string
  12. from types import *
  13. from distutils.core import Command
  14. from distutils.debug import DEBUG
  15. from distutils.sysconfig import get_config_vars
  16. from distutils.errors import DistutilsPlatformError
  17. from distutils.file_util import write_file
  18. from distutils.util import convert_path, subst_vars, change_root
  19. from distutils.errors import DistutilsOptionError
  20. from glob import glob
  21. if sys.version < '2.2':
  22.     WINDOWS_SCHEME = {
  23.         'purelib': '$base',
  24.         'platlib': '$base',
  25.         'headers': '$base/Include/$dist_name',
  26.         'scripts': '$base/Scripts',
  27.         'data': '$base' }
  28. else:
  29.     WINDOWS_SCHEME = {
  30.         'purelib': '$base/Lib/site-packages',
  31.         'platlib': '$base/Lib/site-packages',
  32.         'headers': '$base/Include/$dist_name',
  33.         'scripts': '$base/Scripts',
  34.         'data': '$base' }
  35. INSTALL_SCHEMES = {
  36.     'unix_prefix': {
  37.         'purelib': '$base/lib/python$py_version_short/site-packages',
  38.         'platlib': '$platbase/lib/python$py_version_short/site-packages',
  39.         'headers': '$base/include/python$py_version_short/$dist_name',
  40.         'scripts': '$base/bin',
  41.         'data': '$base' },
  42.     'unix_home': {
  43.         'purelib': '$base/lib/python',
  44.         'platlib': '$base/lib/python',
  45.         'headers': '$base/include/python/$dist_name',
  46.         'scripts': '$base/bin',
  47.         'data': '$base' },
  48.     'nt': WINDOWS_SCHEME,
  49.     'mac': {
  50.         'purelib': '$base/Lib/site-packages',
  51.         'platlib': '$base/Lib/site-packages',
  52.         'headers': '$base/Include/$dist_name',
  53.         'scripts': '$base/Scripts',
  54.         'data': '$base' },
  55.     'os2': {
  56.         'purelib': '$base/Lib/site-packages',
  57.         'platlib': '$base/Lib/site-packages',
  58.         'headers': '$base/Include/$dist_name',
  59.         'scripts': '$base/Scripts',
  60.         'data': '$base' } }
  61. SCHEME_KEYS = ('purelib', 'platlib', 'headers', 'scripts', 'data')
  62.  
  63. class install(Command):
  64.     description = 'install everything from build directory'
  65.     user_options = [
  66.         ('prefix=', None, 'installation prefix'),
  67.         ('exec-prefix=', None, '(Unix only) prefix for platform-specific files'),
  68.         ('home=', None, '(Unix only) home directory to install under'),
  69.         ('install-base=', None, 'base installation directory (instead of --prefix or --home)'),
  70.         ('install-platbase=', None, 'base installation directory for platform-specific files ' + '(instead of --exec-prefix or --home)'),
  71.         ('root=', None, 'install everything relative to this alternate root directory'),
  72.         ('install-purelib=', None, 'installation directory for pure Python module distributions'),
  73.         ('install-platlib=', None, 'installation directory for non-pure module distributions'),
  74.         ('install-lib=', None, 'installation directory for all module distributions ' + '(overrides --install-purelib and --install-platlib)'),
  75.         ('install-headers=', None, 'installation directory for C/C++ headers'),
  76.         ('install-scripts=', None, 'installation directory for Python scripts'),
  77.         ('install-data=', None, 'installation directory for data files'),
  78.         ('compile', 'c', 'compile .py to .pyc [default]'),
  79.         ('no-compile', None, "don't compile .py files"),
  80.         ('optimize=', 'O', 'also compile with optimization: -O1 for "python -O", -O2 for "python -OO", and -O0 to disable [default: -O0]'),
  81.         ('force', 'f', 'force installation (overwrite any existing files)'),
  82.         ('skip-build', None, 'skip rebuilding everything (for testing/debugging)'),
  83.         ('record=', None, 'filename in which to record list of installed files')]
  84.     boolean_options = [
  85.         'compile',
  86.         'force',
  87.         'skip-build']
  88.     negative_opt = {
  89.         'no-compile': 'compile' }
  90.     
  91.     def initialize_options(self):
  92.         self.prefix = None
  93.         self.exec_prefix = None
  94.         self.home = None
  95.         self.install_base = None
  96.         self.install_platbase = None
  97.         self.root = None
  98.         self.install_purelib = None
  99.         self.install_platlib = None
  100.         self.install_headers = None
  101.         self.install_lib = None
  102.         self.install_scripts = None
  103.         self.install_data = None
  104.         self.compile = None
  105.         self.optimize = None
  106.         self.extra_path = None
  107.         self.install_path_file = 1
  108.         self.force = 0
  109.         self.skip_build = 0
  110.         self.warn_dir = 1
  111.         self.build_base = None
  112.         self.build_lib = None
  113.         self.record = None
  114.  
  115.     
  116.     def finalize_options(self):
  117.         if self.prefix and self.exec_prefix or self.home:
  118.             if self.install_base or self.install_platbase:
  119.                 raise DistutilsOptionError, 'must supply either prefix/exec-prefix/home or ' + 'install-base/install-platbase -- not both'
  120.             
  121.         if self.home:
  122.             if self.prefix or self.exec_prefix:
  123.                 raise DistutilsOptionError, 'must supply either home or prefix/exec-prefix -- not both'
  124.             
  125.         if os.name != 'posix':
  126.             if self.exec_prefix:
  127.                 self.warn('exec-prefix option ignored on this platform')
  128.                 self.exec_prefix = None
  129.             
  130.         
  131.         self.dump_dirs('pre-finalize_{unix,other}')
  132.         if os.name == 'posix':
  133.             self.finalize_unix()
  134.         else:
  135.             self.finalize_other()
  136.         self.dump_dirs('post-finalize_{unix,other}()')
  137.         py_version = string.split(sys.version)[0]
  138.         (prefix, exec_prefix) = get_config_vars('prefix', 'exec_prefix')
  139.         self.config_vars = {
  140.             'dist_name': self.distribution.get_name(),
  141.             'dist_version': self.distribution.get_version(),
  142.             'dist_fullname': self.distribution.get_fullname(),
  143.             'py_version': py_version,
  144.             'py_version_short': py_version[0:3],
  145.             'sys_prefix': prefix,
  146.             'prefix': prefix,
  147.             'sys_exec_prefix': exec_prefix,
  148.             'exec_prefix': exec_prefix }
  149.         self.expand_basedirs()
  150.         self.dump_dirs('post-expand_basedirs()')
  151.         self.config_vars['base'] = self.install_base
  152.         self.config_vars['platbase'] = self.install_platbase
  153.         if DEBUG:
  154.             pprint = pprint
  155.             import pprint
  156.             print 'config vars:'
  157.             pprint(self.config_vars)
  158.         
  159.         self.expand_dirs()
  160.         self.dump_dirs('post-expand_dirs()')
  161.         if self.install_lib is None:
  162.             if self.distribution.ext_modules:
  163.                 self.install_lib = self.install_platlib
  164.             else:
  165.                 self.install_lib = self.install_purelib
  166.         
  167.         self.convert_paths('lib', 'purelib', 'platlib', 'scripts', 'data', 'headers')
  168.         self.handle_extra_path()
  169.         self.install_libbase = self.install_lib
  170.         self.install_lib = os.path.join(self.install_lib, self.extra_dirs)
  171.         if self.root is not None:
  172.             self.change_roots('libbase', 'lib', 'purelib', 'platlib', 'scripts', 'data', 'headers')
  173.         
  174.         self.dump_dirs('after prepending root')
  175.         self.set_undefined_options('build', ('build_base', 'build_base'), ('build_lib', 'build_lib'))
  176.  
  177.     
  178.     def dump_dirs(self, msg):
  179.         if DEBUG:
  180.             longopt_xlate = longopt_xlate
  181.             import distutils.fancy_getopt
  182.             print msg + ':'
  183.             for opt in self.user_options:
  184.                 opt_name = opt[0]
  185.                 if opt_name[-1] == '=':
  186.                     opt_name = opt_name[0:-1]
  187.                 
  188.                 if self.negative_opt.has_key(opt_name):
  189.                     opt_name = string.translate(self.negative_opt[opt_name], longopt_xlate)
  190.                     val = not getattr(self, opt_name)
  191.                 else:
  192.                     opt_name = string.translate(opt_name, longopt_xlate)
  193.                     val = getattr(self, opt_name)
  194.                 print '  %s: %s' % (opt_name, val)
  195.             
  196.         
  197.  
  198.     
  199.     def finalize_unix(self):
  200.         if self.install_base is not None or self.install_platbase is not None:
  201.             if (self.install_lib is None and self.install_purelib is None or self.install_platlib is None) and self.install_headers is None and self.install_scripts is None or self.install_data is None:
  202.                 raise DistutilsOptionError, 'install-base or install-platbase supplied, but installation scheme is incomplete'
  203.             
  204.             return None
  205.         
  206.         if self.home is not None:
  207.             self.install_base = self.install_platbase = self.home
  208.             self.select_scheme('unix_home')
  209.         elif self.prefix is None:
  210.             if self.exec_prefix is not None:
  211.                 raise DistutilsOptionError, 'must not supply exec-prefix without prefix'
  212.             
  213.             self.prefix = os.path.normpath(sys.prefix)
  214.             self.exec_prefix = os.path.normpath(sys.exec_prefix)
  215.         elif self.exec_prefix is None:
  216.             self.exec_prefix = self.prefix
  217.         
  218.         self.install_base = self.prefix
  219.         self.install_platbase = self.exec_prefix
  220.         self.select_scheme('unix_prefix')
  221.  
  222.     
  223.     def finalize_other(self):
  224.         if self.home is not None:
  225.             self.install_base = self.install_platbase = self.home
  226.             self.select_scheme('unix_home')
  227.         elif self.prefix is None:
  228.             self.prefix = os.path.normpath(sys.prefix)
  229.         
  230.         self.install_base = self.install_platbase = self.prefix
  231.         
  232.         try:
  233.             self.select_scheme(os.name)
  234.         except KeyError:
  235.             raise DistutilsPlatformError, "I don't know how to install stuff on '%s'" % os.name
  236.  
  237.  
  238.     
  239.     def select_scheme(self, name):
  240.         scheme = INSTALL_SCHEMES[name]
  241.         for key in SCHEME_KEYS:
  242.             attrname = 'install_' + key
  243.             if getattr(self, attrname) is None:
  244.                 setattr(self, attrname, scheme[key])
  245.                 continue
  246.         
  247.  
  248.     
  249.     def _expand_attrs(self, attrs):
  250.         for attr in attrs:
  251.             val = getattr(self, attr)
  252.             if val is not None:
  253.                 if os.name == 'posix':
  254.                     val = os.path.expanduser(val)
  255.                 
  256.                 val = subst_vars(val, self.config_vars)
  257.                 setattr(self, attr, val)
  258.                 continue
  259.         
  260.  
  261.     
  262.     def expand_basedirs(self):
  263.         self._expand_attrs([
  264.             'install_base',
  265.             'install_platbase',
  266.             'root'])
  267.  
  268.     
  269.     def expand_dirs(self):
  270.         self._expand_attrs([
  271.             'install_purelib',
  272.             'install_platlib',
  273.             'install_lib',
  274.             'install_headers',
  275.             'install_scripts',
  276.             'install_data'])
  277.  
  278.     
  279.     def convert_paths(self, *names):
  280.         for name in names:
  281.             attr = 'install_' + name
  282.             setattr(self, attr, convert_path(getattr(self, attr)))
  283.         
  284.  
  285.     
  286.     def handle_extra_path(self):
  287.         if self.extra_path is None:
  288.             self.extra_path = self.distribution.extra_path
  289.         
  290.         if self.extra_path is not None:
  291.             if type(self.extra_path) is StringType:
  292.                 self.extra_path = string.split(self.extra_path, ',')
  293.             
  294.             if len(self.extra_path) == 1:
  295.                 path_file = extra_dirs = self.extra_path[0]
  296.             elif len(self.extra_path) == 2:
  297.                 (path_file, extra_dirs) = self.extra_path
  298.             else:
  299.                 raise DistutilsOptionError, "'extra_path' option must be a list, tuple, or comma-separated string with 1 or 2 elements"
  300.             extra_dirs = convert_path(extra_dirs)
  301.         else:
  302.             path_file = None
  303.             extra_dirs = ''
  304.         self.path_file = path_file
  305.         self.extra_dirs = extra_dirs
  306.  
  307.     
  308.     def change_roots(self, *names):
  309.         for name in names:
  310.             attr = 'install_' + name
  311.             setattr(self, attr, change_root(self.root, getattr(self, attr)))
  312.         
  313.  
  314.     
  315.     def run(self):
  316.         if not self.skip_build:
  317.             self.run_command('build')
  318.         
  319.         for cmd_name in self.get_sub_commands():
  320.             self.run_command(cmd_name)
  321.         
  322.         if self.path_file:
  323.             self.create_path_file()
  324.         
  325.         if self.record:
  326.             outputs = self.get_outputs()
  327.             if self.root:
  328.                 root_len = len(self.root)
  329.                 for counter in xrange(len(outputs)):
  330.                     outputs[counter] = outputs[counter][root_len:]
  331.                 
  332.             
  333.             self.execute(write_file, (self.record, outputs), "writing list of installed files to '%s'" % self.record)
  334.         
  335.         sys_path = map(os.path.normpath, sys.path)
  336.         sys_path = map(os.path.normcase, sys_path)
  337.         install_lib = os.path.normcase(os.path.normpath(self.install_lib))
  338.         if self.warn_dir:
  339.             if self.path_file:
  340.                 pass
  341.             if not (self.install_path_file) and install_lib not in sys_path:
  342.                 log.debug("modules installed to '%s', which is not in Python's module search path (sys.path) -- you'll have to change the search path yourself", self.install_lib)
  343.             
  344.  
  345.     
  346.     def create_path_file(self):
  347.         filename = os.path.join(self.install_libbase, self.path_file + '.pth')
  348.         if self.install_path_file:
  349.             self.execute(write_file, (filename, [
  350.                 self.extra_dirs]), 'creating %s' % filename)
  351.         else:
  352.             self.warn("path file '%s' not created" % filename)
  353.  
  354.     
  355.     def get_outputs(self):
  356.         outputs = []
  357.         for cmd_name in self.get_sub_commands():
  358.             cmd = self.get_finalized_command(cmd_name)
  359.             for filename in cmd.get_outputs():
  360.                 if filename not in outputs:
  361.                     outputs.append(filename)
  362.                     continue
  363.             
  364.         
  365.         if self.path_file and self.install_path_file:
  366.             outputs.append(os.path.join(self.install_libbase, self.path_file + '.pth'))
  367.         
  368.         return outputs
  369.  
  370.     
  371.     def get_inputs(self):
  372.         inputs = []
  373.         for cmd_name in self.get_sub_commands():
  374.             cmd = self.get_finalized_command(cmd_name)
  375.             inputs.extend(cmd.get_inputs())
  376.         
  377.         return inputs
  378.  
  379.     
  380.     def has_lib(self):
  381.         '''Return true if the current distribution has any Python
  382.         modules to install.'''
  383.         if not self.distribution.has_pure_modules():
  384.             pass
  385.         return self.distribution.has_ext_modules()
  386.  
  387.     
  388.     def has_headers(self):
  389.         return self.distribution.has_headers()
  390.  
  391.     
  392.     def has_scripts(self):
  393.         return self.distribution.has_scripts()
  394.  
  395.     
  396.     def has_data(self):
  397.         return self.distribution.has_data_files()
  398.  
  399.     sub_commands = [
  400.         ('install_lib', has_lib),
  401.         ('install_headers', has_headers),
  402.         ('install_scripts', has_scripts),
  403.         ('install_data', has_data)]
  404.  
  405.